import request from "@/utils/request";

const DCYXUSERS_BASE_URL = "/api/v1/dcyx-users";

const DcyxUsersAPI = {
  /** 获取用户信息分页数据 */
  getPage(queryParams?: DcyxUsersPageQuery) {
    return request<any, PageResult<DcyxUsersPageVO[]>>({
      url: `${DCYXUSERS_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },
  /** 查询老师下拉列表 */
  listTeachers() {
    return request<any, OptionType[]>({
      url: `/api/v1/users/teachers`,
      method: "get",
    });
  },
  /**
   * 获取用户信息表单数据
   *
   * @param id 用户信息ID
   * @returns 用户信息表单数据
   */
  getFormData(id: number) {
    return request<any, DcyxUsersForm>({
      url: `${DCYXUSERS_BASE_URL}/${id}/form`,
      method: "get",
    });
  },

  /**
   *  添加用户信息
   *
   *  @param data 用户信息表单数据
   */
  add(data: DcyxUsersForm) {
    return request({
      url: `${DCYXUSERS_BASE_URL}`,
      method: "post",
      data: data,
    });
  },

  /**
   * 更新用户信息
   *
   * @param id 用户信息ID
   * @param data 用户信息表单数据
   */
  update(id: number, data: DcyxUsersForm) {
    return request({
      url: `${DCYXUSERS_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 批量删除用户信息，多个以英文逗号(,)分割
   *
   * @param ids 用户信息ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${DCYXUSERS_BASE_URL}/${ids}`,
      method: "delete",
    });
  },

  /**
   * 修改用户密码
   * @param id 用户ID
   * @param password 新密码
   */
  resetPassword(id: string, password: string) {
    return request({
      url: `${DCYXUSERS_BASE_URL}/${id}/password/reset`,
      method: "put",
      params: { password: password },
    });
  },
  /**
   * 分配单个学生的归属老师
   * @param userId 学生ID
   * @param teacherId 老师ID
   */
  assignTeacher(userId: number, teacherId: number | string) {
    return request({
      url: `${DCYXUSERS_BASE_URL}/${userId}/assign-teacher`,
      method: "put",
      data: { teacherId },
    });
  },
  /**
   * 批量分配学生的归属老师
   * @param data 分配参数
   */
  assignTeacherBatch(data: AssignTeacherBatchRequest) {
    return request<any, AssignTeacherBatchResult>({
      url: `${DCYXUSERS_BASE_URL}/assign-teacher-batch`,
      method: "post",
      data,
    });
  },
  /**
   * 批量创建账号
   * @param data 批量创建参数
   */
  batchCreateAccounts(data: BatchCreateAccountsRequest) {
    return request<any, BatchCreatedAccount[]>({
      url: `${DCYXUSERS_BASE_URL}/batch`,
      method: "post",
      data,
    });
  },
};

export default DcyxUsersAPI;

/** 用户信息分页查询参数 */
export interface DcyxUsersPageQuery extends PageQuery {
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string;
  /** 姓名 */
  fullname?: string;
  /** 性别,0-未知,1-男,2-女 */
  gender?: number;
  /** 手机号 */
  mobile?: string;
  /** 年级 */
  grade?: string;
  /** 微信ID */
  wechatId?: string;
  /** QQ号 */
  qq?: string;
  /** 最后成绩 */
  lastScore?: number;
  /** 账号过期时间 */
  expireTime?: [string, string];
  /** 最近登录时间 */
  loginTime?: [string, string];
  /** 电子邮箱 */
  email?: string;
  /** 关联年级列表 */
  grades?: string;
  /** 学生类型,1=学生,2=其他 */
  studentType?: number;
  /** 首次登录时间 */
  firstLoginTime?: [string, string];
  /** 教师姓名 */
  teacherName?: string;
  /** 教师手机号 */
  teacherMobile?: string;
  /** 班级名称 */
  className?: string;
  /** 状态,1=正常,0=禁用 */
  status?: number;
  /** 有效时长（月），示例：3/6/9/12 */
  effectiveDuration?: number;
  /** 归属老师ID */
  teacherId?: number | string;
}

/** 用户信息表单对象 */
export interface DcyxUsersForm {
  /** 用户ID */
  id?: number;
  /** 所属组织ID */
  organizationId?: number;
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string;
  /** 姓名 */
  fullname?: string;
  /** 性别,0-未知,1-男,2-女 */
  gender?: number;
  /** 手机号 */
  mobile?: string;
  /** 学校名称 */
  schoolName?: string;
  /** 年级 */
  grade?: string;
  /** 微信ID */
  wechatId?: string;
  /** QQ号 */
  qq?: string;
  /** 最后成绩 */
  lastScore?: number;
  /** 账号过期时间 */
  expireTime?: Date;
  /** 最近登录时间 */
  loginTime?: Date;
  /** 电子邮箱 */
  email?: string;
  /** 关联年级列表 */
  grades?: string;
  /** 学生类型,1=学生,2=其他 */
  studentType?: number;
  /** 首次登录时间 */
  firstLoginTime?: Date;
  /** 教师姓名 */
  teacherName?: string;
  /** 教师手机号 */
  teacherMobile?: string;
  /** 班级名称 */
  className?: string;
  /** 状态,1=正常,0=禁用 */
  status?: number;
  /** 有效时长（月），示例：3/6/9/12 */
  effectiveDuration?: number;
  /** 归属老师ID */
  assignedTeacherId?: number;
}

/** 用户信息分页对象 */
export interface DcyxUsersPageVO {
  /** 用户ID */
  id?: number;
  /** 所属组织ID */
  organizationId?: number;
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string;
  /** 姓名 */
  fullname?: string;
  /** 性别,0-未知,1-男,2-女 */
  gender?: number;
  /** 手机号 */
  mobile?: string;
  /** 学校名称 */
  schoolName?: string;
  /** 年级 */
  grade?: string;
  /** 微信ID */
  wechatId?: string;
  /** QQ号 */
  qq?: string;
  /** 最后成绩 */
  lastScore?: number;
  /** 账号过期时间 */
  expireTime?: Date;
  /** 最近登录时间 */
  loginTime?: Date;
  /** 电子邮箱 */
  email?: string;
  /** 关联年级列表 */
  grades?: string;
  /** 学生类型,1=学生,2=其他 */
  studentType?: number;
  /** 首次登录时间 */
  firstLoginTime?: Date;
  /** 教师姓名 */
  teacherName?: string;
  /** 教师手机号 */
  teacherMobile?: string;
  /** 班级名称 */
  className?: string;
  /** 状态,1=正常,0=禁用 */
  status?: number;
  /** 有效时长（月） */
  effectiveDuration?: number;
  /** 归属老师ID */
  assignedTeacherId?: number;
  /** 归属老师姓名 */
  assignedTeacherName?: string;
}

export interface AssignTeacherBatchRequest {
  /** 老师ID */
  teacherId: number | string;
  /** 学生ID集合 */
  userIds: number[];
}

export interface AssignTeacherBatchResult {
  /** 处理总数 */
  total: number;
  /** 实际更新数量 */
  updatedCount: number;
  /** 跳过数量 */
  skippedCount: number;
  /** 跳过的学生ID */
  skippedIds: number[];
  /** 无效学生ID */
  invalidUserIds: number[];
}

export interface BatchCreateAccountsRequest {
  /** 批量创建数量 */
  quantity: number;
  /** 有效时长（月） */
  effectiveDuration: number;
}

export interface BatchCreatedAccount {
  /** 生成的登录名 */
  username: string;
  /** 初始密码 */
  initialPassword: string;
  /** 有效时长（月） */
  effectiveDuration: number;
}
